#include "ListaVendas.h"
#include <iostream>
#include <string>

ListaVendas::ListaVendas()
{
	this->setCodigoVenda( 0 );
}

ListaVendas::~ListaVendas()
{
}

/*--- inicio dos metodos publicos ---*/

void ListaVendas::setCodigoVenda( int vCodigoVenda )
{
	this->mCodigoVendaCorrente = vCodigoVenda;
}

int ListaVendas::getCodigoVenda() const
{
	return this->mCodigoVendaCorrente;
}

int ListaVendas::criaVenda()
{
	char forma;
	Venda* novaVenda;	

	while( forma != 'c' && forma != 'd')
	{
		//system("clear");
		std::cout << "Como vai pagar?([C]heque/[D]inheiro):";
		std::cin >> forma;
		forma = tolower( forma );
	}

	switch( forma )
	{
		case 'c': 	novaVenda = new VendaCheque;
					break;
					
		case 'd':	novaVenda = new VendaDinheiro;
					break;
		default: 	std::cout << "Opção inválida" << std::endl;
	}
	
	int c = this->getCodigoVenda();
	
        
	if(this->mVendas.inserir( *novaVenda, c ))
	{
		std::cout << "Nao inseriu na lista de Vendas" ;
		exit(0);
	}
	this->incrementaCodigoVendaCorrente();	
	
	return c;
}

float ListaVendas::calculaTotalVendas()
{
	float 
	totalVendas;
	
	Venda*
	pAuxiliar;
	
	while( !(this->mVendas.itsTheEnd() ) )
	{
		pAuxiliar = this->mVendas.retornaEsteEAvanca();
		totalVendas += pAuxiliar->getValorTotal();
	}	
	return totalVendas;
}

void ListaVendas::insereProdutoVenda( Produto* pProduto, int vQuantidade, int vCodigoVenda )
{
	Venda*
	pAuxiliar;
        
        std::cout << pProduto->getValor(); 
	
	mVendas.get( pAuxiliar, vCodigoVenda );
	
	pAuxiliar->inserirProduto( pProduto, vQuantidade );
}

Venda* ListaVendas::getVenda( int vCodigoVenda )
{
	Venda*
	pRetorno;
	
	mVendas.get( pRetorno, vCodigoVenda );
	
	return pRetorno;
}

/*--- fim dos metodos publicos ---*/

/*--- inicio dos metodos privados ---*/

void ListaVendas::incrementaCodigoVendaCorrente()
{
	this->mCodigoVendaCorrente++;
}

/*--- fim dos metodos privados ---*/

